home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / MUI / MCC_TimeText / Developer / C / examples / TimeText-Demo.c
Encoding:
C/C++ Source or Header  |  1997-10-07  |  22.0 KB  |  626 lines

  1. /*
  2. **
  3. ** Copyright © 1997 Kai Hofmann. All rights reserved.
  4. ** Registered MUI custom class!
  5. **
  6. ** $VER: TimeText-Demo.c 12.0 (07.10.97)
  7. **
  8. */
  9.  
  10.  #define __MakeLib
  11.  
  12.  #include "system.h"
  13.  #include <mui/Time_mcc.h>
  14.  #include <mui/TimeText_mcc.h>
  15.  #include <mui/Lamp_mcc.h>
  16.  #include <proto/date.h>
  17.  #include <libraries/mui.h>
  18.  #include <proto/muimaster.h>
  19.  #include <exec/libraries.h>
  20.  #include <proto/exec.h>
  21.  #include <proto/intuition.h>
  22.  #include <devices/timer.h>
  23.  #include <clib/alib_protos.h>
  24.  
  25.  
  26.  #ifdef DEBUG
  27.    void kprintf(UBYTE *fmt,...);
  28.    #define debug(x)    kprintf(x "\n");
  29.  #else
  30.    #define debug(x)
  31.  #endif
  32.  
  33.  
  34.  #ifndef MAKE_ID
  35.    #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
  36.  #endif
  37.  
  38.  
  39.  #define MUIM_TT_SecTrigger    0x81ee8000
  40.  
  41.  
  42.  struct MUI_CustomClass *App_CC=NULL,*Win_CC=NULL,*Str_CC=NULL,*TT_CC=NULL;
  43.  
  44.  
  45.  struct Library *MUIMasterBase;
  46.  struct Library *DateBase;
  47.  static Object *App;
  48.  
  49.  struct TT_Data
  50.   {
  51.    struct MUI_InputHandlerNode ihnode;
  52.   };
  53.  
  54.  /* ------------------------------------------------------------------------ */
  55.  
  56.  static ULONG STACKARGS DoSuperNew(struct IClass *cl, Object *obj, ULONG tags, ...)
  57.   {
  58.    return(DoSuperMethod(cl,obj,OM_NEW,&tags,NULL));
  59.   }
  60.  
  61.  /* --- TT ----------------------------------------------------------------- */
  62.  
  63.  static ULONG TT_SecTrigger(struct IClass *cl, Object *obj, Msg msg)
  64.   {
  65.    /*struct TT_Data *data = (struct TT_Data *)INST_DATA(cl,obj);*/
  66.    /*ULONG result;*/
  67.  
  68.    /*result =*/ DoMethod(obj,MUIM_Time_Increase,1UL);
  69.    return(FALSE);
  70.   }
  71.  
  72.  
  73.  static ULONG TT_Setup(struct IClass *cl, Object *obj, struct MUIP_Setup *msg)
  74.   {
  75.    struct TT_Data *data = (struct TT_Data *)INST_DATA(cl,obj);
  76.    /*ULONG result;*/
  77.  
  78.    if (!DoSuperMethodA(cl,obj,(Msg)msg))
  79.     {
  80.      return(FALSE);
  81.     }
  82.    /*result =*/ DoMethod(_app(obj),MUIM_Application_AddInputHandler,&data->ihnode);
  83.    return(TRUE);
  84.   }
  85.  
  86.  
  87.  static ULONG TT_Cleanup(struct IClass *cl, Object *obj, Msg msg)
  88.   {
  89.    struct TT_Data *data = (struct TT_Data *)INST_DATA(cl,obj);
  90.    /*ULONG result;*/
  91.  
  92.    /*result =*/ DoMethod(_app(obj),MUIM_Application_RemInputHandler,&data->ihnode);
  93.    return(DoSuperMethodA(cl,obj,msg));
  94.   }
  95.  
  96.  
  97.  static ULONG TT_New(struct IClass *cl, Object *obj, struct opSet *msg)
  98.   {
  99.    obj = (Object *)DoSuperNew(cl,obj,
  100.                               TAG_MORE, msg->ops_AttrList
  101.                              );
  102.    if (obj != NULL)
  103.     {
  104.      struct TT_Data *data = (struct TT_Data *)INST_DATA(cl,obj);
  105.      /*ULONG result;*/
  106.  
  107.      data->ihnode.ihn_Object  = obj;
  108.      data->ihnode.ihn_Method  = MUIM_TT_SecTrigger;
  109.      data->ihnode.ihn_Flags   = MUIIHNF_TIMER;
  110.      data->ihnode.ihn_Millis  = 1000;
  111.     }
  112.    return((ULONG)obj);
  113.   }
  114.  
  115.  
  116.  static ULONG SAVEDS_ASM TT_Dispatcher(REG(A0) struct IClass *cl, REG(A2) Object *obj, REG(A1) Msg msg)
  117.   {
  118.    switch (msg->MethodID)
  119.     {
  120.      case OM_NEW            : return(TT_New(cl,obj,(struct opSet *)msg));
  121.      case MUIM_Setup            : return(TT_Setup(cl,obj,(struct MUIP_Setup *)msg));
  122.      case MUIM_Cleanup            : return(TT_Cleanup(cl,obj,(struct MUIP_Cleanup *)msg));
  123.      case MUIM_TT_SecTrigger        : return(TT_SecTrigger(cl,obj,msg));
  124.      default                : return(DoSuperMethodA(cl,obj,msg));
  125.     }
  126.   }
  127.  
  128.  /* --- String ------------------------------------------------------------- */
  129.  
  130.  static ULONG Str_New(struct IClass *cl, Object *obj, struct opSet *msg)
  131.   {
  132.    obj = (Object *)DoSuperNew(cl,obj,
  133.                               MUIA_String_Format,    MUIV_String_Format_Left,
  134.                               MUIA_String_MaxLen,    30,
  135.                               MUIA_Frame,        MUIV_Frame_String,
  136.                               MUIA_Background,        MUII_TextBack,
  137.                               TAG_MORE, msg->ops_AttrList
  138.                              );
  139.    return((ULONG)obj);
  140.   }
  141.  
  142.  
  143.  static ULONG Str_DragQuery(struct IClass *cl, Object *obj, struct MUIP_DragQuery *msg)
  144.   {
  145.    /*struct Str_Data *data = (struct Str_Data *)INST_DATA(cl,obj);*/
  146.    /*ULONG result;*/
  147.    ULONG Hour,Min,Sec;
  148.  
  149.    if (get(msg->obj,MUIA_Time_Hour,&Hour) && get(msg->obj,MUIA_Time_Minute,&Min) && get(msg->obj,MUIA_Time_Second,&Sec))
  150.     {
  151.      return(MUIV_DragQuery_Accept);
  152.     }
  153.    return(MUIV_DragQuery_Refuse);
  154.   }
  155.  
  156.  
  157.  static ULONG Str_DragDrop(struct IClass *cl, Object *obj, struct MUIP_DragDrop *msg)
  158.   {
  159.    /*struct Str_Data *data = (struct Str_Data *)INST_DATA(cl,obj);*/
  160.    /*ULONG result;*/
  161.    char str[9];
  162.    ULONG Hour,Min,Sec;
  163.  
  164.    /*result =*/ get(msg->obj,MUIA_Time_Hour,&Hour);
  165.    /*result =*/ get(msg->obj,MUIA_Time_Minute,&Min);
  166.    /*result =*/ get(msg->obj,MUIA_Time_Second,&Sec);
  167.    time_FormatTime("%H:%M:%S",time_Normal,2,FALSE,(unsigned short)Hour,(unsigned short)Min,(unsigned short)Sec,0,str);
  168.    /*result =*/ set(obj,MUIA_String_Contents,(ULONG)str);
  169.    return(0);
  170.   }
  171.  
  172.  
  173.  static ULONG SAVEDS_ASM Str_Dispatcher(REG(A0) struct IClass *cl, REG(A2) Object *obj, REG(A1) Msg msg)
  174.   {
  175.    switch (msg->MethodID)
  176.     {
  177.      case OM_NEW            : return(Str_New(cl,obj,(struct opSet *)msg));
  178.      case MUIM_DragQuery        : return(Str_DragQuery(cl,obj,(struct MUIP_DragQuery *)msg));
  179.      case MUIM_DragDrop            : return(Str_DragDrop(cl,obj,(struct MUIP_DragDrop *)msg));
  180.      default                : return(DoSuperMethodA(cl,obj,msg));
  181.     }
  182.   }
  183.  
  184.  /* --- Window ------------------------------------------------------------- */
  185.  
  186.  static ULONG Win_New(struct IClass *cl, Object *obj, struct opSet *msg)
  187.   {
  188.    Object *TimeText,*Hour,*Min,*Sec,*saveobj,*loadobj,*format,*MidnightSecs;
  189.  
  190.    obj = (Object *)DoSuperNew(cl,obj,
  191.                               MUIA_Window_ID,            MAKE_ID('D','E','M','O'),
  192.                               MUIA_Window_Title,        "TimeText-Demo",
  193.                               MUIA_Window_ScreenTitle,        "TimeText-Demo V1.0",
  194.                               MUIA_Window_RootObject,        VGroup,
  195.                                 MUIA_Group_SameWidth,        TRUE,
  196.                                 MUIA_Group_Child,        TimeText = NewObject(TT_CC->mcc_Class,NULL,
  197.                                   MUIA_Frame,            MUIV_Frame_Text,
  198.                                   MUIA_FrameTitle,        "TimeText.mcc",
  199.                                   MUIA_Background,        MUII_TextBack,
  200.                                   MUIA_Draggable,        TRUE,
  201.                                   /*MUIA_Time_Hour,        17,*/
  202.                                   /*MUIA_Time_Minute,        0,*/
  203.                                   /*MUIA_Time_Second,        0,*/
  204.                                   /*MUIA_Time_ZoneMinute,    60,*/
  205.                                   /*MUIA_Time_DaylightSaving,    FALSE,*/
  206.                                   /*MUIA_Time_ChangeDay,    MUIV_Time_ChangeDay_SummerToWinter,*/
  207.                                   /*MUIA_TimeText_TimeFormat,    "%H:%M:%S",*/
  208.                                   MUIA_ObjectID,        1,
  209.                                 End,
  210.                                 MUIA_Group_Child,        HGroup,
  211.                                   MUIA_Group_SameHeight,    TRUE,
  212.                                   MUIA_Frame,            MUIV_Frame_Group,
  213.                                   MUIA_Group_Child,        RectangleObject,
  214.                                   End,
  215.                                   MUIA_Group_Child,        Hour = NumericbuttonObject,
  216.                                     MUIA_Numeric_Format,    "%lu",
  217.                                     MUIA_Numeric_Min,        0,
  218.                                     MUIA_Numeric_Max,        23,
  219.                                     MUIA_Numeric_Default,    0,
  220.                                     /*MUIA_Numeric_Value,    21,*/
  221.                                     MUIA_CycleChain,        1,
  222.                                     MUIA_Font,            MUIV_Font_Button,
  223.                                   End,
  224.                                   MUIA_Group_Child,        Min = NumericbuttonObject,
  225.                                     MUIA_Numeric_Format,    "%lu",
  226.                                     MUIA_Numeric_Min,        0,
  227.                                     MUIA_Numeric_Max,        59,
  228.                                     MUIA_Numeric_Default,    0,
  229.                                     /*MUIA_Numeric_Value,    0,*/
  230.                                     MUIA_CycleChain,        1,
  231.                                     MUIA_Font,            MUIV_Font_Button,
  232.                                   End,
  233.                                   MUIA_Group_Child,        Sec = NumericbuttonObject,
  234.                                     MUIA_Numeric_Format,    "%lu",
  235.                                     MUIA_Numeric_Min,        0,
  236.                                     MUIA_Numeric_Max,        59,
  237.                                     MUIA_Numeric_Default,    0,
  238.                                     /*MUIA_Numeric_Value,    0,*/
  239.                                     MUIA_CycleChain,        1,
  240.                                     MUIA_Font,            MUIV_Font_Button,
  241.                                   End,
  242.                                   MUIA_Group_Child,        RectangleObject,
  243.                                   End,
  244.                                 End,
  245.                                 MUIA_Group_Child,        HGroup,
  246.                                   MUIA_Frame,            MUIV_Frame_Group,
  247.                                   MUIA_Background,        MUII_GroupBack,
  248.                                   MUIA_Group_SameHeight,    TRUE,
  249.                                   MUIA_Group_Child,        RectangleObject,
  250.                                   End,
  251.                                   MUIA_Group_Child,        MidnightSecs = NumericbuttonObject,
  252.                                     MUIA_Numeric_Format,    "%lu",
  253.                                     MUIA_Numeric_Min,        0,
  254.                                     MUIA_Numeric_Max,        86399,
  255.                                     MUIA_Numeric_Default,    0,
  256.                                     /*MUIA_Numeric_Value,    75600,*/
  257.                                     MUIA_CycleChain,        1,
  258.                                     MUIA_Font,            MUIV_Font_Button,
  259.                                   End,
  260.                                   MUIA_Group_Child,        RectangleObject,
  261.                                   End,
  262.                                 End,
  263.                                 MUIA_Group_Child,        HGroup,
  264.                                   MUIA_Frame,            MUIV_Frame_Group,
  265.                                   MUIA_Background,        MUII_GroupBack,
  266.                                   MUIA_Group_SameHeight,    TRUE,
  267.                                   MUIA_Group_Child,        Label2("Format:"),
  268.                                   MUIA_Group_Child,        format = StringObject,
  269.                                     MUIA_Frame,            MUIV_Frame_String,
  270.                                     MUIA_Background,        MUII_TextBack,
  271.                                     MUIA_String_Accept,        "%:., qHQIpMSRTXrhms0123fvloujzc",
  272.                                     MUIA_String_Format,        MUIV_String_Format_Left,
  273.                                     MUIA_String_MaxLen,        25,
  274.                                     MUIA_CycleChain,        1,
  275.                                   End,
  276.                                 End,
  277.                                 MUIA_Group_Child,        HGroup,
  278.                                   MUIA_Frame,            MUIV_Frame_Group,
  279.                                   MUIA_Background,        MUII_GroupBack,
  280.                                   MUIA_Group_SameHeight,    TRUE,
  281.                                   MUIA_Group_Child,        Label2("Drop here:"),
  282.                                   MUIA_Group_Child,        NewObject(Str_CC->mcc_Class,NULL,MUIA_Dropable,TRUE,TAG_DONE),
  283.                                 End,
  284.                                 MUIA_Group_Child,        HGroup,
  285.                                   MUIA_Frame,            MUIV_Frame_Group,
  286.                                   MUIA_Background,        MUII_GroupBack,
  287.                                   MUIA_Group_SameHeight,    TRUE,
  288.                                   MUIA_Group_Child,        loadobj = TextObject,
  289.                                     MUIA_Frame,            MUIV_Frame_Button,
  290.                                     MUIA_Background,        MUII_ButtonBack,
  291.                                     MUIA_Font,            MUIV_Font_Button,
  292.                                     MUIA_Text_PreParse,        "\33c",
  293.                                     MUIA_InputMode,        MUIV_InputMode_RelVerify,
  294.                                     MUIA_Text_Contents,        "Load",
  295.                                     MUIA_Text_HiChar,        'L',
  296.                                     MUIA_ControlChar,        'l',
  297.                                     MUIA_CycleChain,        1,
  298.                                   End,
  299.                                   MUIA_Group_Child,        saveobj = TextObject,
  300.                                     MUIA_Frame,            MUIV_Frame_Button,
  301.                                     MUIA_Background,        MUII_ButtonBack,
  302.                                     MUIA_Font,            MUIV_Font_Button,
  303.                                     MUIA_Text_PreParse,        "\33c",
  304.                                     MUIA_InputMode,        MUIV_InputMode_RelVerify,
  305.                                     MUIA_Text_Contents,        "Save",
  306.                                     MUIA_Text_HiChar,        'S',
  307.                                     MUIA_ControlChar,        's',
  308.                                     MUIA_CycleChain,        1,
  309.                                   End,
  310.                                 End,
  311.                               End,
  312.                               TAG_MORE, msg->ops_AttrList
  313.                              );
  314.    if (obj != NULL)
  315.     {
  316.      /*struct Win_Data *data = (struct Win_Data *)INST_DATA(cl,obj);*/
  317.      /*ULONG result;*/
  318.      ULONG hour,min,sec,secs;
  319.      STRPTR timeformat;
  320.  
  321.      /*result =*/ get(TimeText,MUIA_Time_Hour,&hour);
  322.      /*result =*/ get(TimeText,MUIA_Time_Minute,&min);
  323.      /*result =*/ get(TimeText,MUIA_Time_Second,&sec);
  324.      /*result =*/ get(TimeText,MUIA_Time_MidnightSecs,&secs);
  325.      /*result =*/ set(Hour,MUIA_Numeric_Value,hour);
  326.      /*result =*/ set(Min,MUIA_Numeric_Value,min);
  327.      /*result =*/ set(Sec,MUIA_Numeric_Value,sec);
  328.      /*result =*/ set(MidnightSecs,MUIA_Numeric_Value,secs);
  329.  
  330.      /*result =*/ get(TimeText,MUIA_TimeText_TimeFormat,&timeformat);
  331.      /*result =*/ set(format,MUIA_String_Contents,timeformat);
  332.  
  333.      /*result =*/ DoMethod(TimeText,MUIM_Notify,MUIA_Time_Hour,MUIV_EveryTime,Hour,3,MUIM_NoNotifySet,MUIA_Numeric_Value,MUIV_TriggerValue);
  334.      /*result =*/ DoMethod(TimeText,MUIM_Notify,MUIA_Time_Minute,MUIV_EveryTime,Min,3,MUIM_NoNotifySet,MUIA_Numeric_Value,MUIV_TriggerValue);
  335.      /*result =*/ DoMethod(TimeText,MUIM_Notify,MUIA_Time_Second,MUIV_EveryTime,Sec,3,MUIM_NoNotifySet,MUIA_Numeric_Value,MUIV_TriggerValue);
  336.      /*result =*/ DoMethod(TimeText,MUIM_Notify,MUIA_Time_MidnightSecs,MUIV_EveryTime,MidnightSecs,3,MUIM_NoNotifySet,MUIA_Numeric_Value,MUIV_TriggerValue);
  337.  
  338.      /*result =*/ DoMethod(Hour,MUIM_Notify,MUIA_Numeric_Value,MUIV_EveryTime,TimeText,3,MUIM_Set,MUIA_Time_Hour,MUIV_TriggerValue);
  339.      /*result =*/ DoMethod(Min,MUIM_Notify,MUIA_Numeric_Value,MUIV_EveryTime,TimeText,3,MUIM_Set,MUIA_Time_Minute,MUIV_TriggerValue);
  340.      /*result =*/ DoMethod(Sec,MUIM_Notify,MUIA_Numeric_Value,MUIV_EveryTime,TimeText,3,MUIM_Set,MUIA_Time_Second,MUIV_TriggerValue);
  341.      /*result =*/ DoMethod(MidnightSecs,MUIM_Notify,MUIA_Numeric_Value,MUIV_EveryTime,TimeText,3,MUIM_Set,MUIA_Time_MidnightSecs,MUIV_TriggerValue);
  342.  
  343.      /*result =*/ DoMethod(format,MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,TimeText,3,MUIM_Set,MUIA_TimeText_TimeFormat,MUIV_TriggerValue);
  344.  
  345.      /*result =*/ DoMethod(loadobj,MUIM_Notify,MUIA_Pressed,FALSE,MUIV_Notify_Application,2,MUIM_Application_Load,MUIV_Application_Load_ENV);
  346.      /*result =*/ DoMethod(saveobj,MUIM_Notify,MUIA_Pressed,FALSE,MUIV_Notify_Application,2,MUIM_Application_Save,MUIV_Application_Save_ENV);
  347.     }
  348.    return((ULONG)obj);
  349.   }
  350.  
  351.  
  352.  static ULONG SAVEDS_ASM Win_Dispatcher(REG(A0) struct IClass *cl, REG(A2) Object *obj, REG(A1) Msg msg)
  353.   {
  354.    switch (msg->MethodID)
  355.     {
  356.      case OM_NEW            : return(Win_New(cl,obj,(struct opSet *)msg));
  357.      default                : return(DoSuperMethodA(cl,obj,msg));
  358.     }
  359.   }
  360.  
  361.  /* --- Application -------------------------------------------------------- */
  362.  
  363.  static ULONG App_New(struct IClass *cl, Object *obj, struct opSet *msg)
  364.   {
  365.    Object *win1;
  366.  
  367.    obj = (Object *)DoSuperNew(cl,obj,
  368.                               MUIA_Application_Title,           "TimeText-Demo",
  369.                               MUIA_Application_Author,          "Kai Hofmann",
  370.                               MUIA_Application_Copyright,       "© 1997 Kai Hofmann",
  371.                               MUIA_Application_Version,         "$VER: TimeText-Demo 1.0 " __AMIGADATE__,
  372.                               MUIA_Application_Description,     "TimeText demonstration program",
  373.                               MUIA_Application_Base,            "TSDEMO",
  374.                               MUIA_Application_SingleTask,      TRUE,
  375.                               MUIA_Application_Active,          TRUE,
  376.                               MUIA_Application_Window,        win1 = NewObject(Win_CC->mcc_Class,NULL,TAG_DONE),
  377.                               TAG_MORE,             msg->ops_AttrList
  378.                              );
  379.    if (obj != NULL)
  380.     {
  381.      /*struct App_Data *data = (struct App_Data *)INST_DATA(cl,obj);*/
  382.      /*ULONG result;*/
  383.  
  384.      /*result =*/ DoMethod(win1,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,MUIV_Notify_Application,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  385.      set(win1,MUIA_Window_Open,TRUE);
  386.     }
  387.    return((ULONG)obj);
  388.   }
  389.  
  390.  
  391.  static ULONG SAVEDS_ASM App_Dispatcher(REG(A0) struct IClass *cl, REG(A2) Object *obj, REG(A1) Msg msg)
  392.   {
  393.    switch (msg->MethodID)
  394.     {
  395.      case OM_NEW            : return(App_New(cl,obj,(struct opSet *)msg));
  396.      default                : return(DoSuperMethodA(cl,obj,msg));
  397.     }
  398.   }
  399.  
  400.  /* ------------------------------------------------------------------------ */
  401.  
  402.  static void OpenReq(char *const str)
  403.   {
  404.    struct EasyStruct req =
  405.     {
  406.      sizeof(struct EasyStruct),
  407.      0,
  408.      "TimeText-Demo",
  409.      NULL,
  410.      "OK",
  411.     };
  412.  
  413.    req.es_TextFormat = str;
  414.    EasyRequest(NULL,&req,NULL,(ULONG)MUIMASTER_VMIN);
  415.   }
  416.  
  417.  /* ------------------------------------------------------------------------ */
  418.  
  419.  static int muiclasses_Init(void)
  420.   {
  421.    int retstat = RETURN_OK;
  422.  
  423.    App_CC = MUI_CreateCustomClass(NULL,MUIC_Application,NULL,0,App_Dispatcher);
  424.    if (App_CC == NULL)
  425.     {
  426.      OpenReq("Can not create 'App' privat custom class!");
  427.      retstat = RETURN_ERROR;
  428.     }
  429.    else
  430.     {
  431.      Win_CC = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,0,Win_Dispatcher);
  432.      if (Win_CC == NULL)
  433.       {
  434.        OpenReq("Can not create 'Win' privat custom class!");
  435.        retstat = RETURN_ERROR;
  436.       }
  437.      else
  438.       {
  439.        Str_CC = MUI_CreateCustomClass(NULL,MUIC_String,NULL,0,Str_Dispatcher);
  440.        if (Str_CC == NULL)
  441.         {
  442.          OpenReq("Can not create 'Str' privat custom class!");
  443.          retstat = RETURN_ERROR;
  444.         }
  445.        else
  446.         {
  447.          TT_CC = MUI_CreateCustomClass(NULL,MUIC_TimeText,NULL,sizeof(struct TT_Data),TT_Dispatcher);
  448.          if (TT_CC == NULL)
  449.           {
  450.            OpenReq("Can not create 'TT' privat custom class!");
  451.            retstat = RETURN_ERROR;
  452.           }
  453.         }
  454.       }
  455.     }
  456.  
  457.    return(retstat);
  458.   }
  459.  
  460.  
  461.  static int muiclasses_Cleanup(void)
  462.   {
  463.    int retstat = RETURN_OK;
  464.  
  465.    if (TT_CC != NULL)
  466.     {
  467.      if (!MUI_DeleteCustomClass(TT_CC))
  468.       {
  469.        OpenReq("Can not delete 'TT' privat custom class!");
  470.        retstat = RETURN_ERROR;
  471.       }
  472.     }
  473.    if (Str_CC != NULL)
  474.     {
  475.      if (!MUI_DeleteCustomClass(Str_CC))
  476.       {
  477.        OpenReq("Can not delete 'Str' privat custom class!");
  478.        retstat = RETURN_ERROR;
  479.       }
  480.     }
  481.    if (Win_CC != NULL)
  482.     {
  483.      if (!MUI_DeleteCustomClass(Win_CC))
  484.       {
  485.        OpenReq("Can not delete 'Win' privat custom class!");
  486.        retstat = RETURN_ERROR;
  487.       }
  488.     }
  489.    if (App_CC != NULL)
  490.     {
  491.      if (!MUI_DeleteCustomClass(App_CC))
  492.       {
  493.        OpenReq("Can not delete 'App' privat custom class!");
  494.        retstat = RETURN_ERROR;
  495.       }
  496.     }
  497.  
  498.    return(retstat);
  499.   }
  500.  
  501.  /* ------------------------------------------------------------------------ */
  502.  
  503.  static int gui_Init(void)
  504.   {
  505.    int retstat;
  506.  
  507.    MUIMasterBase = OpenLibrary((UBYTE *)MUIMASTER_NAME,(unsigned long)MUIMASTER_VMIN);
  508.    if (MUIMasterBase != NULL)
  509.     {
  510.      retstat = muiclasses_Init();
  511.      if (retstat == RETURN_OK)
  512.       {
  513.        Object *tt;
  514.  
  515.        tt = MUI_NewObject(MUIC_TimeText,
  516.                           TAG_DONE
  517.                          );
  518.        if (tt != NULL)
  519.         {
  520.          MUI_DisposeObject(tt);
  521.          App = NewObject(App_CC->mcc_Class,NULL,TAG_DONE);
  522.          if (App == NULL)
  523.           {
  524.            /*retstat =*/ muiclasses_Cleanup();
  525.            CloseLibrary(MUIMasterBase);
  526.            OpenReq("Can not create application object!");
  527.            retstat = RETURN_FAIL;
  528.           }
  529.         }
  530.        else
  531.         {
  532.          /*retstat =*/ muiclasses_Cleanup();
  533.          CloseLibrary(MUIMasterBase);
  534.          OpenReq("Missing TimeText.mcc!");
  535.          retstat = RETURN_FAIL;
  536.         }
  537.       }
  538.      else
  539.       {
  540.        /*retstat =*/ muiclasses_Cleanup();
  541.        CloseLibrary(MUIMasterBase);
  542.       }
  543.     }
  544.    else
  545.     {
  546.      OpenReq("Can not open muimaster.library V%lu!");
  547.      retstat = RETURN_FAIL;
  548.     }
  549.    return(retstat);
  550.   }
  551.  
  552.  
  553.  static int gui_Cleanup(void)
  554.   {
  555.    int retstat = RETURN_OK;
  556.  
  557.    if (MUIMasterBase != NULL)
  558.     {
  559.      if (App != NULL)
  560.       {
  561.        MUI_DisposeObject(App);
  562.       }
  563.      retstat = muiclasses_Cleanup();
  564.      if (retstat == RETURN_OK)
  565.       {
  566.        CloseLibrary(MUIMasterBase);
  567.       }
  568.      else
  569.       {
  570.        OpenReq("Can not close muimaster.library!");
  571.        retstat = RETURN_FAIL;
  572.       }
  573.     }
  574.    return(retstat);
  575.   }
  576.  
  577.  
  578.  static void gui_MainLoop(void)
  579.   {
  580.    if (App != NULL)
  581.     {
  582.      ULONG signals=0;
  583.  
  584.      while (DoMethod(App,(unsigned long)MUIM_Application_NewInput,&signals) != MUIV_Application_ReturnID_Quit)
  585.       {
  586.        if (signals)
  587.         {
  588.          signals = Wait(signals | SIGBREAKF_CTRL_C);
  589.          if (signals & SIGBREAKF_CTRL_C)
  590.           {
  591.            /*ULONG result;*/
  592.  
  593.            /*result =*/ DoMethod(App,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  594.           }
  595.         }
  596.       }
  597.     }
  598.   }
  599.  
  600.  /* ------------------------------------------------------------------------ */
  601.  
  602.  void main(void)
  603.   {
  604.    DateBase = OpenLibrary(DATE_NAME,33);
  605.    if (DateBase != NULL)
  606.     {
  607.      if (((DateBase->lib_Version > 33)) || ((DateBase->lib_Version == 33) && (DateBase->lib_Revision >= 280)))
  608.       {
  609.        if (gui_Init() == RETURN_OK)
  610.         {
  611.          gui_MainLoop();
  612.          /*result =*/ gui_Cleanup();
  613.         }
  614.       }
  615.      else
  616.       {
  617.        OpenReq("Can not open date.library V33.280");
  618.       }
  619.      CloseLibrary(DateBase);
  620.     }
  621.    else
  622.     {
  623.      OpenReq("Can not open date.library V33");
  624.     }
  625.   }
  626.